package com.jvm.jvm.ch1;

import com.jvm.jvm.entity.User;

import java.lang.ref.SoftReference;
import java.util.LinkedList;
import java.util.List;

/**
 * @author  lihh
 * @description -Xms100m -Xmx100m
 */
public class SoftReferenceOutOfMemory {
    public static void main(String[] args) {
        // 构建一个强引用对象
        User u = new User("King", 1);

        // 构建 一个弱引用
        SoftReference<User> userSoftReference = new SoftReference<>(u);
        // 干掉 强引用的引用关系
        u = null;

        System.out.println(userSoftReference.get());
        System.gc();

        System.out.println("After gc");
        System.out.println(userSoftReference.get());

        // 集合中 添加data
        List<byte[]> list = new LinkedList<>();
        try {
            for (int i = 0; i < 100; i++) {
                list.add(new byte[1024 * 1024]);
            }
        } catch (Throwable e) {
            // OOM 异常时 直接打印软引用对象
            System.out.println("soft -- " + userSoftReference.get());
        }
    }
}
